package utils

import (
	"fmt"
	"strings"
)

type Bcd struct{}

// BcdToString 将BCD码转为字符串
func (b *Bcd) BcdToString(bcd []byte) string {
	var s string
	for _, b := range bcd {
		// 高4位和低4位分别转为数字
		high := b >> 4  // 高4位（例如 0x12 → 1）
		low := b & 0x0F // 低4位（例如 0x12 → 2）

		// 忽略无效BCD（>9的数值）
		if high <= 9 {
			s += fmt.Sprintf("%d", high)
		}
		if low <= 9 {
			s += fmt.Sprintf("%d", low)
		}
	}
	return s
}

// BcdToStringSkipZero 将BCD码转为字符串并忽略前导0
func (b *Bcd) BcdToStringSkipZero(bcd []byte) string {
	var s string
	for _, b := range bcd {
		// 高4位和低4位分别转为数字
		high := b >> 4  // 高4位（例如 0x12 → 1）
		low := b & 0x0F // 低4位（例如 0x12 → 2）

		// 忽略无效BCD（>9的数值）
		if high <= 9 {
			s += fmt.Sprintf("%d", high)
		}
		if low <= 9 {
			s += fmt.Sprintf("%d", low)
		}
	}
	return strings.TrimLeft(s, "0")
}
